AngularのアプリをAmplifyでホスティングしてみた
こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。
先日、Amplifyの入門としてまずはAmplify CLIを利用してアプリケーションの初期化処理までを行ってみました。 今回はアプリをホスティングして、実際にブラウザで表示するところを試してみたいと思います。
前提
この環境は以下の記事でAngularのアプリを作成し、Amplify CLIで初期化までを行っています。
ホスティングの設定
ホスティングの設定として、amplify add hosting
コマンドを実行します。
プラグインモジュールの選択では今回はHosting with Amplify Console
を選択して、Amplify Consoleに任せるようにします。
また、タイプの設定ではContinuous deployment (Git-based deployments)
としてGitベースでCDできるようにします。
$ amplify add hosting Initializing new Amplify CLI version... Done initializing new version. Scanning for plugins... Plugin scan successful ? Select the plugin module to execute Hosting with Amplify Console (Managed hosting with custom domains, Continuous deployment) ? Choose a type Continuous deployment (Git-based deployments) ? Continuous deployment is configured in the Amplify Console. Please hit enter once you connect your repository
Continuous deployment (Git-based deployments)
を選択すると、ブラウザでAWS管理コンソールが開き、Amplifyの設定画面が開きます。
Frontendの設定で、今回は「リポジトリサービスプロバイダー」に「GitHub」を指定します。
GitHubと連携してよいか認証が要求されるので、認証をしたらリポジトリとブランチを指定して「次へ」と進みます。なお、今回は事前に空のリポジトリ(ブランチはmain
のみ)をGitHubで準備していました。
アプリのビルド設定については、一旦そのままにして「次へ」と進みます。
設定を確認し、「保存してデプロイ」をクリックします。
クリック後、しばらくすると自動で「プロビジョン → ビルド → デプロイ → 検証」と処理が進んでいき、完了します。
コンソールに戻ってEnterを入力すると、最終的にホスティングされたURLが表示されます。
? Continuous deployment is configured in the Amplify Console. Please hit enter once you connect your repository Amplify hosting urls: ┌──────────────┬────────────────────────────────────────────┐ │ FrontEnd Env │ Domain │ ├──────────────┼────────────────────────────────────────────┤ │ main │ https://main.xxxxxxxxxxxxxx.amplifyapp.com │ └──────────────┴────────────────────────────────────────────┘
設定の修正
実はこの段階だと、表示されたURLにアクセスしてもAccess Denied
が表示されてしまいます。
これは、GitHub側のリポジトリはmain
ブランチの初期リポジトリだけ存在していたので、ローカルのAngularのコードがGitHub側に無く、想定されたコードが存在しないためです。また、「ビルド設定」も適切に設定されていないのでビルドされたファイル(アーティファクト)も適切なものが出力されません。
それぞれ修正をしていきます。
ビルド設定の修正
ビルド設定はAmplifyコンソール画面から修正します。
Amplifyコンソール画面で設定したいアプリ(今回はhelloamplifyangular
)を選択後、画面左側の「アプリの設定 > ビルドの設定」から設定画面を開きます。
「ビルド設定の追加」の「編集」ボタンから以下のように編集をして保存します。
まずはpreBuild
でアプリで利用するパッケージ群をインストールしたいのでyarn install
を指定します。(yarnはビルド環境に自動セットアップされており、利用可能です)
次にbuild
でアプリをビルドするコマンドyarn build
を指定します。
baseDirectory
は適宜アプリケーションに合わせて設定しますが、今回はhello-amplify-angular
という名前のアプリで、ビルド結果の出力先がdist/hello-amplify-angular
になるので、このように設定しています。
cache
にはnode_modulesフォルダを指定します。これにより、初回ビルド時にこのパスの内容がキャッシュされ、次回以降のビルド時にはキャッシュを利用することでビルド速度が向上します。
version: 1 frontend: phases: preBuild: commands: - yarn install build: commands: - yarn build artifacts: baseDirectory: dist/hello-amplify-angular files: - '**/*' cache: paths: - node_modules/**/*
ローカルGitのGitHubへの接続と修正
次に、アプリのソースコードについてです。
現状ではローカルのGitの設定でremote
の設定がされていないので、remote設定を実施してGitHub側へPushします。
$ git remote add origin https://github.com/xxxxxxxxxxxx/hello-amplify-angular.git $ git add . $ git commit -m "[add]init commit" $ git push origin HEAD
これでGitHub側へpushされましたが、実はこのブランチ名はmaster
です。Amplifyで設定したブランチはmain
ブランチなのでローカル側で強制的にマージしてmain
ブランチにpushしてしまいます。
$ git checkout main $ git merge --allow-unrelated-histories origin/master CONFLICT (add/add): Merge conflict in README.md Auto-merging README.md CONFLICT (add/add): Merge conflict in .gitignore Auto-merging .gitignore Automatic merge failed; fix conflicts and then commit the result. # ここでコンフリクトの手動マージ作業をする $ git add . $ git commit -m "[fix]force merged origin/master" [main ccd61e2] [fix]force merged origin/master $ git push origin HEAD Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 366 bytes | 183.00 KiB/s, done. Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (2/2), completed with 2 local objects. To https://github.com/DaisukeOtaka/hello-amplify-angular.git 2b44b21..ccd61e2 HEAD -> main
これで設定の修正は完了です。
ビルド結果の確認
先程GitHubのmainブランチにpushしましたが、その結果としてAmplifyによって自動でビルドが走り始めます。
問題なければ以下のように表示されているはずです。
実際にブラウザでも確認してみます。
想定どおり、ちゃんとAngularの初期サンプルが表示されました!
検証時に困ったこと
実はこちらの内容を試したときに「ビルド設定」を修正しなければいけないこと と、「どこからどうやって修正すべきか」を特定するまで結構時間が掛かってしまいました。
対応時には、以下を参考にさせていただきました。
まとめ
以上、AngularのアプリをAmplifyでホスティングしてみました!
一度Gitとの連携ができれば、あとはCI/CDが簡単に実施できることがわかりました。ブランチにコミットした段階でパイプラインが動くので、早い段階で問題に気づくことができそうでとても良いですね。
今後は、バックエンド側のAPIも作成して、AppSync周りも一緒に触っていければと思います。
どなたかのお役に立てば幸いです。それでは!